/*
 * Logger_Compresor.cpp
 *
 *  Created on: 26/06/2010
 *      Author: juan
 */

#include "Logger_Compresor.h"
#include <string.h>
#include <string>

Logger_Compresor::Logger_Compresor(std::string nombre_archivo) {


	char nombre[100];
	memset(nombre,0,100);
	strcpy(nombre,nombre_archivo.c_str());
	Logger_Iniciar(&logger,nombre,TAMANIO_BLOQUE);

}


void Logger_Compresor::loggear_creacion_ctx(Contexto* contexto){

	char aux[TAMANIO_MSJ_LOGGER];
	memset(aux,0,TAMANIO_MSJ_LOGGER);
	strcat(aux,"- Se crea contexto: '");
	if(contexto->getNombre() == "\n")
		strcat(aux,"\\n");
	else
		strcat(aux, contexto->getNombre().c_str());

	strcat(aux, "'");
	//inserto en el logger
	Logger_Insertar(&logger,aux);
}

void Logger_Compresor::loggear_compression_escape(Contexto* contexto){

	char aux[TAMANIO_MSJ_LOGGER];
	memset(aux,0,TAMANIO_MSJ_LOGGER);
	if(contexto){
		sprintf(aux,"- Se comprime ESC con orden %d en contexto: '",contexto->getNombre().length());

		if(contexto->getNombre() == "\n")
			strcat(aux,"(salto de linea)");
		else
			strcat(aux, contexto->getNombre().c_str());

		strcat(aux, "'");
	}
	else
		strcat(aux,"- Se comprime ESC en el contexto: -1 ");

	//inserto en el logger
	Logger_Insertar(&logger,aux);
}

void Logger_Compresor::loggear_compression_caracter(Contexto* contexto, TLetraExt caracter){

	char aux[TAMANIO_MSJ_LOGGER];
	memset(aux,0,TAMANIO_MSJ_LOGGER);

	if(contexto){

		if(caracter == SALTO_DE_LINEA) {
			sprintf(aux,"- Se comprime caracter '\\n' en contexto: '");
		} else if (caracter == FIN_DE_ARCHIVO){
			sprintf(aux,"- Se comprime caracter 'EOF' en contexto: '");
		} else {
			sprintf(aux,"- Se comprime caracter '%c' en contexto: '",caracter);
		}

		if(contexto->getNombre() == "\n")
			strcat(aux,"\\n");
		else
			strcat(aux, contexto->getNombre().c_str());
		strcat(aux, "'");
	}
	else {
		if(caracter == SALTO_DE_LINEA) {
			sprintf(aux,"- Se comprime caracter '\\n' en contexto: -1");
		} else if (caracter == FIN_DE_ARCHIVO) {
			sprintf(aux,"- Se comprime caracter 'EOF' en contexto: -1");
		} else {
			sprintf(aux,"- Se comprime caracter '%c' en contexto: -1",caracter);
		}
	}
	//inserto en el logger
	Logger_Insertar(&logger,aux);
}

void Logger_Compresor::loggear_descompression_escape(Contexto* contexto){

	char aux[TAMANIO_MSJ_LOGGER];
	memset(aux,0,TAMANIO_MSJ_LOGGER);
	if(contexto){
		sprintf(aux,"- Se descomprime ESC con orden %d en contexto: '",contexto->getNombre().length());

		if(contexto->getNombre() == "\n")
			strcat(aux,"\\n");
		else
			strcat(aux, contexto->getNombre().c_str());

		strcat(aux, "'");
	}
	else
		strcat(aux,"- Se descomprime ESC en el contexto: -1 ");

	//inserto en el logger
	Logger_Insertar(&logger,aux);
}

void Logger_Compresor::loggear_descompression_caracter(Contexto* contexto, TLetraExt caracter){

	char aux[TAMANIO_MSJ_LOGGER];
	memset(aux,0,TAMANIO_MSJ_LOGGER);

	if(contexto){
		if(caracter == SALTO_DE_LINEA) {
			sprintf(aux,"- Se descomprime caracter '\\n' en contexto: '");
		} else if (caracter == FIN_DE_ARCHIVO) {
			sprintf(aux,"- Se descomprime caracter 'EOF' en contexto: '");
		} else {
			sprintf(aux,"- Se descomprime caracter '%c' en contexto: '",caracter);
		}

		if(contexto->getNombre() == "\n")
			strcat(aux,"\\n");
		else
			strcat(aux, contexto->getNombre().c_str());
		strcat(aux, "'");
	}else {
		if(caracter == SALTO_DE_LINEA) {
			sprintf(aux,"- Se descomprime caracter '\\n' en contexto: -1");
		} else if (caracter == FIN_DE_ARCHIVO) {
			sprintf(aux,"- Se descomprime caracter 'EOF' en contexto: -1");
		} else {
			sprintf(aux,"- Se descomprime caracter '%c' en contexto: -1",caracter);
		}
	}
	//inserto en el logger
	Logger_Insertar(&logger,aux);
}

Logger_Compresor::~Logger_Compresor() {

	Logger_Cerrar(&logger);
}
